package com.domus.dreamMenu.servidor.negocios;

import java.util.ArrayList;

import com.domus.dreamMenu.servidor.repositorios.RepositorioPrato;
import com.domus.dreamMenu.servidor.repositorios.RepositorioSecao;
import com.domus.dreamMenu.servidor.tipos.Cardapio;
import com.domus.dreamMenu.servidor.tipos.Prato;
import com.domus.dreamMenu.servidor.tipos.Secao;
import com.domus.dreamMenu.servidor.util.Notificador;
import com.domus.dreamMenu.servidor.util.RepositorioObserver;

public final class NegocioCardapio extends NegociosAbstrato<RepositorioPrato, Prato, Integer> {
	
	private static NegocioCardapio singleton;
	
	private final RepositorioSecao secoes;
	private final RepositorioObserver observersSecao;
	
	private NegocioCardapio() {
		this.observers = new RepositorioObserver();
		this.repositorio = new RepositorioPrato();
		
		this.secoes = new RepositorioSecao();
		this.observersSecao = new RepositorioObserver(); 
	}

	public static NegociosAbstrato getInstancia(){
		if(NegocioCardapio.singleton == null)
			NegocioCardapio.singleton = new NegocioCardapio();
		return NegocioCardapio.singleton;
	}
	
	public void desabilitaraPratoCardapio(Integer idprato){
		//TODO desablitar prato
		
		this.notificarObservers();
	}

	public void adicionarSecao(Secao novo) {
		this.secoes.inserir(novo);
	}

	public void alterarSecao(Secao novo, Integer chave) {
		this.secoes.alterar(novo, chave);		
	}

	public void registrarObserverSecao(Notificador notificador) {
		this.observersSecao.registrar(notificador);
	}

	public void removerSecao(Integer chave) {
		this.secoes.remover(chave);		
	}

	public void removerObserverSecao(Notificador notificador) {
		this.observersSecao.retirarRegistro(notificador);
	}
	
	public Cardapio getCardapio(){
		return this.secoes.getCardapio();
	}
}
